package practica1.actions;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import practica1.controller.Controller;
import practica1.language.Language;
import practica1.language.LanguageEvent;
import practica1.language.LanguageListener;
import practica1.logic.LogicExperimento;

/**
 * Clase que implementa la acción de colocar a un experimento seleccionado como
 * experimento principal
 * @author Miguel González - Ceura
 */
public class ActionMainExperimento extends AbstractAction implements LanguageListener {
    
    private LogicExperimento experimento;
    
    /**
     * Constructor de la clase que asocia la acción a un experimento determinado
     * @param experimento Experimento
     */
    public ActionMainExperimento(LogicExperimento experimento) {
        super(Language.getI().getP("EXPERIMENTO_PRINCIPAL"), null);

        Language.getI().addLanguageListener(this);
        
        putValue(SHORT_DESCRIPTION, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
        putValue(NAME, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
        
        this.experimento = experimento;
        
        //Se establece el estado seleccionado del action
        putValue(SELECTED_KEY, Boolean.TRUE);
    }
    
    /**
     * Constructor de la clase
     */
    public ActionMainExperimento() {
        super(Language.getI().getP("EXPERIMENTO_PRINCIPAL"), null);

        Language.getI().addLanguageListener(this);
        
        putValue(SHORT_DESCRIPTION, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
        putValue(NAME, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
        
        experimento = null;
        
        //Se establece el estado seleccionado del action
        putValue(SELECTED_KEY, Boolean.TRUE);
    }
    
    /**
     * Cuando sucede la acción nos encargamos de establecer como proyecto principal
     * al seleccionado, o bien, al proyecto al que se haya asociado la acción.
     * @param e ActionEvent
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if(experimento == null) {
            //Establecemos el experimento seleccionado como experimento principal
            Controller.getInstance().setExperimentoPrincipal(
                    Controller.getInstance().getExperimentoSeleccionado());
        } else {
            Controller.getInstance().setExperimentoPrincipal(experimento);
        }
    }

    /**
     * Al cambiar el idioma actualizamos el nombre y la descripción
     * @param evt LanguageEvent
     */
    @Override
    public void idiomaChange(LanguageEvent evt) {
        putValue(SHORT_DESCRIPTION, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
        putValue(NAME, Language.getI().getP("EXPERIMENTO_PRINCIPAL"));
    }
}